package com.sp.scmdb.serviceImpl;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.sp.scmdb.bean.ParameterBean;
import com.sp.scmdb.bean.UserBean;
import com.sp.scmdb.common.CommonParamter;
import com.sp.scmdb.dao.ParameterDao;
import com.sp.scmdb.entity.Parameter;
import com.sp.scmdb.service.LogService;
import com.sp.scmdb.service.ParameterService;

/***
 * 
 * 参数Service接口实现类
 * */
@Service("parameterService")
public class ParameterServiceImpl implements ParameterService {

	/** 参数接口 **/
	private ParameterDao parameterDao;

	/** 日志service */
	private LogService logs;

	/**
	 * @param logs
	 *            the logs to set
	 */
	@Required
	public void setLogs(LogService logs) {
		this.logs = logs;
	}

	/**
	 * @param parameterDao
	 *            the parameterDao to set
	 */
	@Required
	public void setParameterDao(ParameterDao parameterDao) {
		this.parameterDao = parameterDao;
	}

	// 添加参数
	@Transactional
	public String addParameter(ParameterBean entity, UserBean ub) {

		String result = "3";
		Parameter par = new Parameter();
		par.setHeadName(entity.getHeadName());
		par.setPersonOut(entity.getPersonOut());
		par.setTimeOut(entity.getTimeOut());
		par.setRefreTime(entity.getRefreTime());
		par.setAsUse(entity.getAsUse());
		par.setGlobalID(entity.getGlobalID());

		if (par != null) {
			// 先使用状态
			updateAsUse(entity);
			parameterDao.save(par);

			/** 添加日志 */
			logs.addLog(ub, "添加 " + entity.getHeadName() + "的系统参数成功！");
			result = CommonParamter.CHECK_SUCCESS;
		} else {
			result = CommonParamter.CHECK_REPEAT;
		}

		return result;
	}

	// 删除参数
	@Transactional
	public String delParameter(String[] arr, UserBean ub) {
		String result = "3";
		List<Parameter> ps = new ArrayList<Parameter>();
		if (arr.length > 0) {
			for (int i = 0; i < arr.length; i++) {
				List<Parameter> list = queryParameterName(" from Parameter where 1=1 and id = "
						+ arr[i]);
				Parameter parameter = list.get(0);
				// 1代表该卡号已经被使用不准删除！
				if (parameter.getAsUse().equals("1")) {
					result = CommonParamter.CHECK_FAIL;
					return result;
				} else {
					ps.add(parameter);
				}
			}
			// 如果都是未使用的则全部删除！！！
			for (int i = 0; i < ps.size(); i++) {
				Parameter parameter = ps.get(i);
				if (parameter.getAsUse().equals("0")) {
					parameterDao.delete(parameter);
					/** 添加日志 */
					logs.addLog(ub, "删除 " + parameter.getHeadName()
							+ "的系统参数成功！");
					result = CommonParamter.CHECK_SUCCESS;
				}
			}
		} else {
			result = CommonParamter.CHECK_FAIL;
		}
		return result;
	}

	// 修改参数
	@Transactional
	public String editParameter(ParameterBean entity, UserBean ub) {

		String result = "3";
		StringBuffer Hql = new StringBuffer("from Parameter where 1=1 ");
		if (StringUtils.isNotEmpty(entity.getId())) {
			Hql.append("and id='").append(entity.getId()).append("'");
			List<Parameter> list = queryParameterName(Hql.toString());
			if (CollectionUtils.isNotEmpty(list)) {
				updateAsUse(entity);
				Parameter par = (Parameter) list.get(0);
				par.setHeadName(entity.getHeadName());
				par.setPersonOut(entity.getPersonOut());
				par.setTimeOut(entity.getTimeOut());
				par.setRefreTime(entity.getRefreTime());
				par.setAsUse(entity.getAsUse());
				par.setGlobalID(entity.getGlobalID());
				parameterDao.saveOrUpdate(par);

				/** 添加日志 */
				logs.addLog(ub, "修改 " + list.get(0).getHeadName() + "的系统参数成功！");
				result = CommonParamter.CHECK_SUCCESS;
			} else {
				result = CommonParamter.CHECK_REPEAT;
			}
		}
		return result;
	}

	// 查询参数
	public List<Parameter> queryParameter() {
		return parameterDao.queryAll();
	}

	// 根据条件查询参数
	public List<Parameter> queryParameterName(String Hql) {
		return parameterDao.queryHql(Hql);
	}

	// 系统只能使用一条参数信息，如果添加或者修改该条参数为使用则系统原本的使用状态变成未使用
	public String updateAsUse(ParameterBean t) {
		StringBuffer Hql = new StringBuffer();
		Hql.append("from Parameter where 1=1 ");
		if (t.getAsUse().equals("1")) {
			Hql.append("and asUse = " + t.getAsUse());
			List<Parameter> parList = parameterDao.queryHql(Hql.toString());
			if (CollectionUtils.isNotEmpty(parList)) {
				for (int i = 0; i < parList.size(); i++) {
					Parameter pr = parList.get(i);
					pr.setAsUse("0");
					parameterDao.saveOrUpdate(pr);
				}
			}
		}
		return null;
	}

	@Transactional(readOnly = true)
	public Parameter queryParameterIsUse() {
		Parameter parameter = new Parameter();
		String Hql = "from Parameter where asUse = 1";
		List<Parameter> parList = parameterDao.queryHql(Hql);
		if (CollectionUtils.isNotEmpty(parList)) {
			parameter = (Parameter) parList.get(0);
		}
		return parameter;
	}
}
